//package com.LFLWZ.utils;
//
//
//import com.alibaba.fastjson.JSON;
//import com.cloudnote.beans.pojo.Image;
//import com.cloudnote.beans.vo.Image_vo;
//import com.cloudnote.dao.images.ImagesDao;
//import io.minio.MinioClient;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//import java.io.InputStream;
//import java.util.List;
//
///**
// * 文件工具类
// * 注意：暂时只对图片进行操作(后期可支持更多格式文件)
// *
// */
//@Component
//public class FilesUtils {
//
//    @Resource
//    private ImagesDao imagesDao;
//
//    @Autowired
//    private RedisUtils redisUtils;
//
//    private static FilesUtils filesUtils;
//    private static String url = "http://121.36.30.36:9000";
//    private static String accessKey = "admin";
//    private static String secretKey = "j348admin";
//
//    //注解用于告诉次代码在Spring加载之前就运行
//    @PostConstruct
//    public void init() {
//        filesUtils = this;//工具类的实例赋值给fileUtils
//        filesUtils.imagesDao = this.imagesDao;//会激活Spring对Dao的管理并赋给此类
//        filesUtils.redisUtils = this.redisUtils;
//        // 工具类已经初始化了，被纳入spring管理
//    }
//
//    /**
//     * 保存图片为临时图片 [暂不限制类型]
//     *
//     * @param image_vo
//     * @return 图片id
//     */
//
//    public static String uploadImages(Image_vo image_vo) {
//
//        MultipartFile file = image_vo.getFiles();
//        //非空检测
//        if (!file.isEmpty()) {
//            //图片大小检测
//            if (file.getSize() / 1024 / 1024 < 10) {
//                String imageId = RandomUtils.getrandomImageId();//创建图片唯一id
//                try {
//                    MinioClient minioClient = new MinioClient(url, accessKey, secretKey);
//                    InputStream is = file.getInputStream(); //得到文件流
//                    String fileName = file.getOriginalFilename(); //文件名
//                    String contentType = file.getContentType();  //类型
//                    // 截取字符串中的文件名后缀
//                    String fileType = contentType.substring(6, contentType.length());
//                    //把文件放置Minio桶(文件夹)param:桶、文件名、文件流、类型
//                    minioClient.putObject("imgs", imageId + "." + fileType, is, contentType);
//                    //保存到数据库,param:id,原文件名,所属者,用途,状态1,图片url,类型,
//                    Image image = new Image(imageId, fileName, image_vo.getUserCode(), image_vo.getPurposeId(), 0, minioClient.presignedGetObject("imgs", imageId + "."+fileType), contentType);
//                    if (filesUtils.imagesDao.addImage(image) > 0) {
//                        return imageId;//保存成功后返回图片id
//                    } else {
//                        return "5003";//保存图片信息至表中错误
//                    }
//                } catch (Exception e) {
//                    System.out.println("图片保存异常:" + e);
//                    return "5002";//保存异常
//                }
//            } else {
//                return "5001";//超出大小限制
//            }
//        } else {
//            return "5000";//空文件
//        }
//    }
//
//    /**
//     * 设置图片状态[-1隐藏,0待确认,1使用中,4异常]
//     * 状态为-1 的不支持修改
//     * 注意 若改为0 且创建天数大于1天该图片将会被删除
//     * @param imageId
//     * @return
//     */
//    public static boolean updateImageShow(int imageShow, String imageId) {
//        if(filesUtils.imagesDao.updaeImageShow(imageShow, imageId) > 0) return true;
//        //删除redis
//        filesUtils.redisUtils.delete("cloudnote:imageinfo:" + imageId);
//        return false;
//    }
//
//    /**
//     * 获取图片信息
//     * 使用了redis缓存
//     * @param imageId
//     * @return
//     */
//    public static Image getImageInfo(String imageId) {
//        try {
//            String s = filesUtils.redisUtils.get("cloudnote:imageinfo:" + imageId);
//            if (s != null) {
//                return JSON.parseObject(s, Image.class);
//            } else {
//                // 读取数据库
//                Image image = filesUtils.imagesDao.getImageInfo(imageId);
//                if (image == null) return null;
//                String image2 = JSON.toJSONString(image);
//                filesUtils.redisUtils.set("cloudnote:imageinfo:" + imageId, image2, 2);
//                return image;
//            }
//        } catch (Exception e) {
//            e.getMessage();
//        }
//        return null;
//    }
//
//    /**
//     * 自动删除图片,
//     * 即创建日期超过24小时并且状态为-1的图片。
//     * 注意：该操作会删除数据表中对应的数据与图片服务器对应的数据
//     */
//    @Scheduled(fixedDelay = 1000 * 60 * 5, initialDelay = 1000 * 60 * 1)
////fixedDelay :第一次结束到第二次启动间隔 5分钟;initialDelay:首次延迟时间 1分钟
//    public void delImage() {
//        //查询符合条件的图片
//        List<Image> imageList = filesUtils.imagesDao.selRubbishImage();
//        int i = 0;//计数器
//        String dellist = "";//查询出的id
//        for (Image image : imageList) {
//            try {
//                //获取类型
//                String fileType = image.getImageType().substring(6, image.getImageType().length());
//                //获取对minio操作对象
//                MinioClient minioClient = new MinioClient(url, accessKey, secretKey);
//                //进行删除操作
//                minioClient.removeObject("imgs", image.getImageId() + "." + fileType);
//                /**
//                 * 异常处理：minio没有指定文件也会报错
//                 */
//                filesUtils.imagesDao.delImage(image.getImageId());//删除对应表数据启用中,生成环境需要启用
//                i++;
//            } catch (Exception e) {
//                System.out.println("minio删除图片失败" + e.getMessage());
//                filesUtils.imagesDao.updaeImageShow(4, image.getImageId());
//            }
//            dellist += image.getImageId() + ",";
//        }
//        System.out.println("【FilesUtils:定时任务】自动删除垃圾图片 [已找到:" + imageList.size() + " 已删除:" + i + "]  ImageId:" + dellist);
//    }
//}
